﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Sisco.AplicacionEscritorio.Maestro
{
    public partial class TipoProblema : Form
    {
        public TipoProblema()
        {
            InitializeComponent();
        }

        private void TipoProblema_Load(object sender, EventArgs e)
        {
            ListarTipoProblema();
        }

        private void ListarTipoProblema()
        {
            LogicaNegocio.TipoProblemaBLL tipoProblemaBLL = new LogicaNegocio.TipoProblemaBLL();

            gridInfoRegistrada.DataSource = tipoProblemaBLL.Listar();
            gridInfoRegistrada.ClearSelection();
            gridInfoRegistrada.CurrentCell = null;
        }

        private void LimpiarFormulario()
        {
            txtTipoProblema.ResetText();
        }

        private void gridInfoRegistrada_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
        {
            if (gridInfoRegistrada.DataSource != null)
            {
                gridInfoRegistrada.Columns["ID"].Visible = false;
                gridInfoRegistrada.Columns["TIPO_PROBLEMA"].HeaderText = "Tipo de problema";
                gridInfoRegistrada.Columns["TIPO_PROBLEMA"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
                gridInfoRegistrada.Columns["ELIMINADO"].Visible = false;
                gridInfoRegistrada.Columns["PROBLEMA"].Visible = false;
            }
        }

        private void btnCerrar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void gridInfoRegistrada_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                AccesoDatos.PROBLEMA_TIPO tipoProblema = gridInfoRegistrada.Rows[e.RowIndex].DataBoundItem as AccesoDatos.PROBLEMA_TIPO;

                txtTipoProblema.Text = tipoProblema.TIPO_PROBLEMA.Trim();
            }
        }

        private void btnRegistrar_Click(object sender, EventArgs e)
        {
            if (!string.IsNullOrWhiteSpace(txtTipoProblema.Text))
            {
                LogicaNegocio.TipoProblemaBLL tipoProblemaBLL = new LogicaNegocio.TipoProblemaBLL();
                List<AccesoDatos.PROBLEMA_TIPO> lista = tipoProblemaBLL.Listar();
                AccesoDatos.PROBLEMA_TIPO problemaTipo = lista.Find(x => x.TIPO_PROBLEMA.Equals(txtTipoProblema.Text.Trim(), StringComparison.CurrentCultureIgnoreCase) && x.ELIMINADO == 0);

                if (problemaTipo == null)
                {
                    AccesoDatos.PROBLEMA_TIPO nuevoProblemaTipo = new AccesoDatos.PROBLEMA_TIPO()
                    {
                        TIPO_PROBLEMA = txtTipoProblema.Text.Trim(),
                        ELIMINADO = 0
                    };

                    tipoProblemaBLL.Registrar(nuevoProblemaTipo);

                    ListarTipoProblema();
                    LimpiarFormulario();
                }
                else
                {
                    MessageBox.Show("El valor ingresado ya se encuentra en la lista", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
            else
            {
                MessageBox.Show("Ingrese campo 'Tipo de problema'", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
            }
        }

        private void btnModificar_Click(object sender, EventArgs e)
        {
            if (gridInfoRegistrada.SelectedRows.Count > 0)
            {
                if (!string.IsNullOrWhiteSpace(txtTipoProblema.Text))
                {
                    AccesoDatos.PROBLEMA_TIPO selectedTipoProblema = gridInfoRegistrada.SelectedRows[0].DataBoundItem as AccesoDatos.PROBLEMA_TIPO;
                    LogicaNegocio.TipoProblemaBLL tipoProblemaBLL = new LogicaNegocio.TipoProblemaBLL();

                    if (selectedTipoProblema.TIPO_PROBLEMA.Equals(txtTipoProblema.Text.Trim(), StringComparison.CurrentCultureIgnoreCase))
                    {
                        tipoProblemaBLL.Actualizar(selectedTipoProblema, txtTipoProblema.Text.Trim());
                        ListarTipoProblema();
                        LimpiarFormulario();
                    }
                    else
                    {
                        List<AccesoDatos.PROBLEMA_TIPO> lista = tipoProblemaBLL.Listar();
                        AccesoDatos.PROBLEMA_TIPO tipo = lista.Find(x => x.TIPO_PROBLEMA.Equals(txtTipoProblema.Text.Trim(), StringComparison.CurrentCultureIgnoreCase) && x.ELIMINADO == 0);

                        if (tipo == null)
                        {
                            tipoProblemaBLL.Actualizar(selectedTipoProblema, txtTipoProblema.Text.Trim());
                            ListarTipoProblema();
                            LimpiarFormulario();
                        }
                        else
                        {
                            MessageBox.Show("El valor ingresado ya se encuentra en la lista", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                        }
                    }
                }
                else
                {
                    MessageBox.Show("Ingrese campo 'Tipo de problema'", "Sisco", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
                }
            }
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {
            if (gridInfoRegistrada.SelectedRows.Count > 0)
            {
                DialogResult dr = MessageBox.Show("¿Confirma eliminar la fila seleccionada?", "Sisco", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1);

                if (dr == DialogResult.Yes)
                {
                    AccesoDatos.PROBLEMA_TIPO selectedTipoProblema = gridInfoRegistrada.SelectedRows[0].DataBoundItem as AccesoDatos.PROBLEMA_TIPO;
                    LogicaNegocio.TipoProblemaBLL tipoProblemaBLL = new LogicaNegocio.TipoProblemaBLL();

                    tipoProblemaBLL.Eliminar(selectedTipoProblema);
                    ListarTipoProblema();
                    LimpiarFormulario();
                }
            }
        }        
    }
}
